def signal(df, n, factor_name):
    # 计算该小时的涨幅，跌幅被视为0，只保留涨幅
    df['该小时涨幅'] = df['close'].pct_change(1).apply(lambda x: x if x > 0 else 0)
    # 计算滚动窗口期内的最大涨幅
    df[factor_name] = df['该小时涨幅'].rolling(n, min_periods=1).max()

    # 删除临时列
    del df['该小时涨幅']

    return df
